//package com.yuebao.mq;
//
//
//
//
//import com.alibaba.fastjson.JSON;
//
//import com.yuebao.api.FundStockService;
//
//import com.yuebao.model.dto.ReduceStock;
//
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
//import org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly;
//import org.apache.rocketmq.common.message.MessageExt;
//import org.apache.rocketmq.spring.annotation.ConsumeMode;
//import org.apache.rocketmq.spring.annotation.MessageModel;
//import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
//import org.apache.rocketmq.spring.core.RocketMQListener;
//import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.io.UnsupportedEncodingException;
////consumeMode = ConsumeMode.ORDERLY
//@Slf4j
//@RocketMQMessageListener(topic = "fund-service",consumerGroup = "${rocketmq.consumer.group}",messageModel = MessageModel.BROADCASTING)
//@Component
//public class FundStockListener implements RocketMQListener<MessageExt>,RocketMQPushConsumerLifecycleListener {
//
//    @Resource
//    private FundStockService fundStockService;
//
//
//
//    @Override
//    public void onMessage(MessageExt messageExt) {
//        log.info("收到库存变动请求");
//
//        try {
//            //1. 解析消息内容
//            String msgId = messageExt.getMsgId();
//            String tags= messageExt.getTags();
//            String keys= messageExt.getKeys();
//            if(tags.equals("reduce")){
//
//                String body = new String(messageExt.getBody(), "UTF-8");
//                ReduceStock reduceStock = JSON.parseObject(body, ReduceStock.class);
//
//
//                log.info("消费完成，开始减库存");
//                boolean isSuccess = reduceStock(reduceStock);
//                if(!isSuccess){
//                    rollbackStock();
//                    log.info("扣库存失败 回退");
//                }
//                reduceStock(reduceStock);
//                log.info("库存扣减成功");
//            }
//            else {
//                log.info("功能待开发");
//            }
//
//
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//            rollbackStock();
//            log.info("扣库存失败 回退");
//        } catch (Exception e) {
//            rollbackStock();
//            e.printStackTrace();
//            log.info("扣库存失败 回退");
//
//        }
//
////        log.info("接受消息成功");
//
//    }
//
//    //定义消费策略
//    @Override
//    public void prepareStart(DefaultMQPushConsumer consumer) {
//        // 每次拉取的间隔，单位为毫秒
//        consumer.setPullInterval(5000);
//        // 设置每次从队列中拉取的消息数为10 每个topic默认4个队列 每次消费 队列数*每次拉消息个数
//        // 对于每个消息 是多线程消费
//        //定义每个队列拉消息的个数
//        consumer.setPullBatchSize(20);
//    }
//
//
//    //订单成功减库存
//    private boolean reduceStock(ReduceStock reduceStock) throws Exception {
//
//        boolean success = fundStockService.update().setSql("stock=stock-" + reduceStock.getStock()).eq("fund_id", reduceStock.getFundId()).update();
//        if(!success)
//            throw new Exception("扣库存失败 回退");
//        return success;
//    }
//
//
//    //订单失败加库存
//    private void rollbackStock(){
//        System.out.println("回滚库存成功");
//    }
//
//
//
//}
